package epin.fujiajun.sort;

import epin.fujiajun.data.Array;

/**
 * Created by DELL on 2017/8/15.
 */
public abstract class ArraySortBase {

    /**
     * <p>排序算法</p>
     *
     * @param a
     */
    public abstract void sort(Array[] a);

    /**
     * <p>判断v是否小于w</p>
     *
     * @param v
     * @param w
     * @return
     */
    public boolean less(Array v, Array w){
        return v.compareTo(w) < 0;
    }


    /**
     * <p>交换数组i，j两个位置的值</p>
     *
     * @param a
     * @param i
     * @param j
     */
    public void exChange(Array[] a, int i, int j){
        Array t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    /**
     * <p>展示数组所有元素</p>
     *
     * @param a
     */
    public void show(Array[] a){
        System.out.println("数组元素如下：");
        for(int i = 0;i < a.length;i++){
            System.out.println("第" + (i + 1) + "个元素" + " : " + a[i].toString());
        }
        System.out.println();
        System.out.println();
    }


    /**
     * <p>判断数组是否由小到大按顺序排列</p>
     *
     * @param a
     * @return
     */
    public boolean isSorted(Array[] a){

        for (int i = 1;i < a.length;i++){
            if (less(a[i], a[i-1])){
                return false;
            }
        }

        return true;
    }


    /**
     * <p>主方法</p>
     *
     * @param a
     */
    public void main(Array[] a){
        sort(a);
        show(a);
        System.out.println("运行结果：" + isSorted(a));
    }

}
